<!DOCTYPE html>
<html lang="en">

<head>
	<meta charset="UTF-8">
	<title>11_Promise对象</title>
</head>

<body>
<!--
	Promise.prototype.then()
	Promise.prototype.catch()
	Promise.prototype.finally()

	Promise.resolve()
	Promise.reject()
	Promise.all()
	Promise.race()
	Promise.allSettled()
	Promise.any()
	
-->
	<script>
		// https://blog.csdn.net/m0_68324632/article/details/126459643
		// Promise.all、Promise.allSettled、Promise.any、Promise.race
		const userPromise = new Promise((reslove, reject) => {
			setTimeout(function () {
				// reslove(['mojobo', 'vanpelt', 'wycats']);
				reject('no user')
			}, 2000)
		});
		const moviePromise = new Promise((reslove, reject) => {
			setTimeout(function () {
				// reslove({ name: "天地滂沱如何渡？", rating: 9.2 });
				reject(Error('no movie'))
			}, 500)
		})

		// all按照先后顺序执行
		// 成功的时候返回的是一个结果数组，
		// 而失败的时候则返回最先被reject失败状态的值
		// [只要有一个失败就报错]
		// Promise.all([userPromise, moviePromise])
		// 	.then(response => {
		// 		const [users, movie] = response;
		// 		console.log(users);
		// 		console.log(movie);
		// 	})
		// 	.catch(err => {
		// 		console.log(err)
		// 	})

		// race哪个结果获得的快，就返回那个结果
	// 	// 不管结果本身是成功状态还是失败状态:「谁跑的快，以谁为准执行回调」
		// Promise.race([userPromise,moviePromise])
		// 	.then(response=>{
		// 		console.log(response);
		// 	})
		// 	.catch(err=>{
		// 		console.log(err)
		// 	})

	// 	// allSettled
	// 	// 无论成功还是失败,都会返回一个数组
	// 	// 成功: {status: 'fulfilled', value: Array(3)}
	// 	// 失败: {status: 'rejected', reason: Error: no movie at http://127.0.0.1:5501/09_Pro
		// Promise.allSettled([userPromise,moviePromise])
		// .then(response=>{
		// 		console.log(response);
		// 	})

	//    // any 
	//    // 只能成功一个 some 如果有一个元素满足条件，则表达式返回true
	//    // 全部失败才会失败 every 如果所有元素都满足条件，则返回 true
	   Promise.any([userPromise,moviePromise])
		.then(response=>{ // 只要有一个 fetch() 请求成功
				console.log(response);
			})	
			.catch(err=>{ // 所有三个 fetch() 全部请求失败
				console.log(err)
			})
			
	</script>


</body>

</html>